The Unified Parallel C (UPC) is a language implementation of the partitioned global address space (PGAS) paradigm that has been proposed as a productivity feature for high performance computing systems. The PGAS paradigm presents a shared-memory abstraction for programming distributed-memory machines. PGAS languages improve ease of programming and also provide leverage to a programmer to tune a program to achieve higher performance. PGAS can be assumed to be a viable programming model for massively parallel computers as it utilizes threads so that the amount of memory per thread is usable, as opposed to processes as in the Message Passing Interface (MPI) paradigm.
FIG. 1 illustrates a distinction between the MPI paradigm, a shared memory paradigm and the PGAS paradigm (e.g., as represented by UPC). In the PGAS paradigm computation is performed in multiple places, where a place contains data that can be operated on remotely. Data lives in the place it was created, for its lifetime. A datum in one place may point to a datum in another place. Data-structures (e.g., arrays) may be distributed across many places. Places may have different computational properties (mapping to a hierarchy of compute engines). In general a place expresses locality.
PGAS programming languages offer a high-productivity programming model for parallel programming. PGAS languages, such as UPC, combine the simplicity of shared-memory programming with the efficiency of a message-passing paradigm. The efficiency is obtained through a combination of factors: programmers declare how the data is partitioned and distributed between threads and use a single processor-multiple data (SPMD) programming model to define work; compilers can use the data annotations to optimize accesses and communication. One UPC compiler of interest herein is one known as an XL UPC Compiler available from the assignee of this patent application.
A PGAS language provides an explicitly parallel, shared-memory like programming model with a global addressable space that allows a programmer to declare and “directly” access data distributed across a machine. There is a partitioned address space where memory is logically partitioned between local and remote (a two-level memory hierarchy). The PGAS language uses the single processor-multiple data (SPMD) execution model wherein all threads of control execute the same program and where the number of threads is (typically) fixed at startup.
In UPC the programmer works with a single shared, partitioned address space. In this address space variables can be directly read and written by any processor, but each variable is physically associated with a single processor. UPC uses the SPMD computational model wherein an amount of parallelism is fixed at program startup time, typically with a single thread of execution per processor.